import { onLaunch } from "@dcloudio/uni-app";
import { useAccountStore } from "@/stores/account";
import { jsonToQueryString, checkNeedLoginURL, toLoginPage, forceUpdate, parseUrlQuery } from "@/utils";

/**
 * 应用程序初始化设置
 */
export default function useAppInitSetting() {
  const accountStore = useAccountStore();

  /** 自定义全局路由验证 */
  function routeVerify() {
    const list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
    list.forEach((item) => {
      // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
      uni.addInterceptor(item, {
        invoke({ url }) {
          // 未登录情况下，访问强制登录页面，重定向登陆页
          if (!accountStore.hasLogin && checkNeedLoginURL(url)) {
            uni.showModal({
              title:'提示',
              content:'该操作需要登录,立即登录?',
              cancelText:'稍后再说',
              confirmText:'立即登录',
              success: ({ confirm }) => {
                if(confirm) toLoginPage();
              }
            })
            return false;
          }

          // #ifdef MP-WEIXIN
          // 微信小程序防止页面栈重复
          if (["navigateTo", "redirectTo"].includes(item)) {
            /** 当前页面栈 */
            const pages = getCurrentPages<{ $page: { fullPath: string } }>();
            // 已存在页面，直接返回历史页面
            const index = pages.findLastIndex(({ $page }) => $page.fullPath === url);
            if (index !== -1) {
              uni.navigateBack({
                delta: pages.length - 1 - index,
                success: () => {
                  // 解决navigateBack目标页面onLoad不执行问题
                  const { onLoad, options } = getCurrentPages<any>().pop();
                  onLoad(options);
                },
              });
              return false;
            }

            // 页面栈超过10层，navigateTo改为redirectTo
            if (pages.length === 10 && item === "navigateTo") {
              uni.redirectTo({ url });
              return false;
            }
          }
          // #endif
        },
      });
    });
  }

  onLaunch(async (options) => {
    /** 程序启动路径 */
    const fullPath = `/${options?.path}`;

    // #ifdef H5
    // URL携带Token，更新登录状态
    if (options?.query.token) accountStore.token = options.query.token;
    // #endif

    // 未登录情况下，程序首次启动强制登录页面，重定向登陆页
    if (!accountStore.hasLogin && checkNeedLoginURL(fullPath)) {
      const searchParams = options?.query.scene ? decodeURIComponent(options.query.scene) : jsonToQueryString(options?.query);
      toLoginPage(`${fullPath}?${searchParams}`);
    } else if (options?.query.scene) {  // 微信扫小程序码进入程序
      accountStore.shareInfo = parseUrlQuery(options.query.scene);
      uni.redirectTo({ url: `${fullPath}?${decodeURIComponent(options.query.scene)}` });
    }

    // #ifdef MP
    forceUpdate();
    // if (!accountStore.hasLogin) await accountStore.loginMP();
    // #endif

    routeVerify();
  });
}
